#include <stdio.h>  
#include <stdlib.h>  
#include <signal.h>  
#include <unistd.h>  

void handle_sigint(int signo) {  
    printf("Caught SIGINT (Ctrl+C), signal number: %d\n", signo);  
}  

int main() {  
    struct sigaction new_action, old_action;  

    // 设置新的信号处理动作  
    new_action.sa_handler = handle_sigint; // 新的信号处理函数  
    sigemptyset(&new_action.sa_mask);       // 清空信号集，不阻塞其他信号  
    new_action.sa_flags = 0;                 // 没有特定标志  

    // 获取当前的SIGINT处理设定，并设定新处理  
    if (sigaction(SIGINT, &new_action, &old_action) == -1) {  
        perror("sigaction");  
        exit(EXIT_FAILURE);  
    }  

    printf("Press Ctrl+C to trigger SIGINT...\n");  

    // 持续运行，直到收到SIGINT  
    while (1) {  
        pause(); // 等待信号  
    }  

    // 这里不会到达，因为程序会在 SIGINT 接收到前暂停  
    return 0;  
}
